﻿2026-08-08T19:19:33.2111510Z Current runner version: '2.336.0'
2026-08-08T19:19:33.2155424Z ##[group]Runner Image Provisioner
2026-08-08T19:19:33.2157171Z Hosted Compute Agent
2026-08-08T19:19:33.2158128Z Version: 20260707.563
2026-08-08T19:19:33.2159178Z Commit: 02667638d2b423fbc733a8e32a88b44996a3ba6e
2026-08-08T19:19:33.2160499Z Build Date: 2026-07-07T19:33:50Z
2026-08-08T19:19:33.2161593Z Worker ID: {bb131850-c504-47e3-a855-62fa80631732}
2026-08-08T19:19:33.2163262Z Azure Region: eastus2
2026-08-08T19:19:33.2164262Z ##[endgroup]
2026-08-08T19:19:33.2166936Z ##[group]Operating System
2026-08-08T19:19:33.2168083Z Ubuntu
2026-08-08T19:19:33.2168930Z 24.04.4
2026-08-08T19:19:33.2169708Z LTS
2026-08-08T19:19:33.2170614Z ##[endgroup]
2026-08-08T19:19:33.2171490Z ##[group]Runner Image
2026-08-08T19:19:33.2172669Z Image: ubuntu-24.04
2026-08-08T19:19:33.2173612Z Version: 20260720.247.2
2026-08-08T19:19:33.2176137Z Included Software: https://github.com/actions/runner-images/blob/ubuntu24/20260720.247/images/ubuntu/Ubuntu2404-Readme.md
2026-08-08T19:19:33.2178732Z Image Release: https://github.com/actions/runner-images/releases/tag/ubuntu24%2F20260720.247
2026-08-08T19:19:33.2180439Z ##[endgroup]
2026-08-08T19:19:33.2182528Z ##[group]GITHUB_TOKEN Permissions
2026-08-08T19:19:33.2187990Z Contents: read
2026-08-08T19:19:33.2189077Z Metadata: read
2026-08-08T19:19:33.2189990Z ##[endgroup]
2026-08-08T19:19:33.2193156Z Secret source: Actions
2026-08-08T19:19:33.2195597Z Prepare workflow directory
2026-08-08T19:19:33.2771628Z Prepare all required actions
2026-08-08T19:19:33.2845355Z Getting action download info
2026-08-08T19:19:33.4870073Z Download action repository 'actions/checkout@v4' (SHA:11d5960a326750d5838078e36cf38b85af677262)
2026-08-08T19:19:33.7471255Z Download action repository 'actions/setup-python@v5' (SHA:a26af69be951a213d495a4c3e4e4022e16d87065)
2026-08-08T19:19:33.9475860Z Complete job name: Migration, contracts, quality and repository safety
2026-08-08T19:19:34.0329595Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T19:19:34.0339951Z ##[group]Run actions/checkout@v4
2026-08-08T19:19:34.0340700Z with:
2026-08-08T19:19:34.0341164Z   fetch-depth: 0
2026-08-08T19:19:34.0341657Z   repository: Gamexgit/FinanceManager
2026-08-08T19:19:34.0346384Z   token: ***
2026-08-08T19:19:34.0346839Z   ssh-strict: true
2026-08-08T19:19:34.0347302Z   ssh-user: git
2026-08-08T19:19:34.0347764Z   persist-credentials: true
2026-08-08T19:19:34.0348260Z   clean: true
2026-08-08T19:19:34.0348716Z   sparse-checkout-cone-mode: true
2026-08-08T19:19:34.0349254Z   fetch-tags: false
2026-08-08T19:19:34.0349711Z   show-progress: true
2026-08-08T19:19:34.0350167Z   lfs: false
2026-08-08T19:19:34.0350685Z   submodules: false
2026-08-08T19:19:34.0351149Z   set-safe-directory: true
2026-08-08T19:19:34.0351685Z   allow-unsafe-pr-checkout: false
2026-08-08T19:19:34.0352427Z env:
2026-08-08T19:19:34.0352915Z   PYTHONPATH: src
2026-08-08T19:19:34.0353369Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:19:34.0354084Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:19:34.0355164Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:19:34.0356043Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:19:34.0356739Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:19:34.0357275Z ##[endgroup]
2026-08-08T19:19:34.1824052Z Syncing repository: Gamexgit/FinanceManager
2026-08-08T19:19:34.1827354Z ##[group]Getting Git version info
2026-08-08T19:19:34.1828591Z Working directory is '/home/runner/work/FinanceManager/FinanceManager'
2026-08-08T19:19:34.1830206Z [command]/usr/bin/git version
2026-08-08T19:19:34.1846143Z git version 2.54.0
2026-08-08T19:19:34.2044308Z ##[endgroup]
2026-08-08T19:19:34.2052154Z Temporarily overriding HOME='/home/runner/work/_temp/b2f85bdd-6e80-4297-b704-2dcfdbbb000f' before making global git config changes
2026-08-08T19:19:34.2056307Z Adding repository directory to the temporary git global config as a safe directory
2026-08-08T19:19:34.2058307Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/FinanceManager/FinanceManager
2026-08-08T19:19:34.2062499Z Deleting the contents of '/home/runner/work/FinanceManager/FinanceManager'
2026-08-08T19:19:34.2064812Z ##[group]Initializing the repository
2026-08-08T19:19:34.2067175Z [command]/usr/bin/git init /home/runner/work/FinanceManager/FinanceManager
2026-08-08T19:19:34.2156615Z hint: Using 'master' as the name for the initial branch. This default branch name
2026-08-08T19:19:34.3443313Z hint: will change to "main" in Git 3.0. To configure the initial branch name
2026-08-08T19:19:34.3446060Z hint: to use in all of your new repositories, which will suppress this warning,
2026-08-08T19:19:34.3448012Z hint: call:
2026-08-08T19:19:34.3448935Z hint:
2026-08-08T19:19:34.3450281Z hint: 	git config --global init.defaultBranch <name>
2026-08-08T19:19:34.3451575Z hint:
2026-08-08T19:19:34.3453007Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2026-08-08T19:19:34.3454768Z hint: 'development'. The just-created branch can be renamed via this command:
2026-08-08T19:19:34.3456827Z hint:
2026-08-08T19:19:34.3457825Z hint: 	git branch -m <name>
2026-08-08T19:19:34.3459779Z hint:
2026-08-08T19:19:34.3466166Z hint: Disable this message with "git config set advice.defaultBranchName false"
2026-08-08T19:19:34.3469024Z Initialized empty Git repository in /home/runner/work/FinanceManager/FinanceManager/.git/
2026-08-08T19:19:34.3476563Z [command]/usr/bin/git remote add origin https://github.com/Gamexgit/FinanceManager
2026-08-08T19:19:34.3478840Z ##[endgroup]
2026-08-08T19:19:34.3479617Z ##[group]Disabling automatic garbage collection
2026-08-08T19:19:34.3480785Z [command]/usr/bin/git config --local gc.auto 0
2026-08-08T19:19:34.3482212Z ##[endgroup]
2026-08-08T19:19:34.3482905Z ##[group]Setting up auth
2026-08-08T19:19:34.3483615Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-08-08T19:19:34.3487414Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-08-08T19:19:34.3492178Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-08-08T19:19:34.3496409Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-08-08T19:19:34.3706546Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-08-08T19:19:34.3734076Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-08-08T19:19:34.4181639Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2026-08-08T19:19:34.4187714Z ##[endgroup]
2026-08-08T19:19:34.4188977Z ##[group]Fetching the repository
2026-08-08T19:19:34.4191747Z [command]/usr/bin/git -c protocol.version=2 fetch --prune --no-recurse-submodules origin +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/* +29375c19a23023cc92aae98d7f3c56b59ae72b29:refs/remotes/pull/45/merge
2026-08-08T19:19:35.3778130Z From https://github.com/Gamexgit/FinanceManager
2026-08-08T19:19:35.3781447Z  * [new branch]      Sprint14/twr-xirr-performance-attribution -> origin/Sprint14/twr-xirr-performance-attribution
2026-08-08T19:19:35.3787432Z  * [new branch]      Sprint15/household-import-transfer-reconciliation-v1 -> origin/Sprint15/household-import-transfer-reconciliation-v1
2026-08-08T19:19:35.3789988Z  * [new branch]      Sprint16/hotfix-openpyxl-runtime-dependency -> origin/Sprint16/hotfix-openpyxl-runtime-dependency
2026-08-08T19:19:35.3792912Z  * [new branch]      Sprint16/smart-household-inbox-real-data-onboarding-v2 -> origin/Sprint16/smart-household-inbox-real-data-onboarding-v2
2026-08-08T19:19:35.3795492Z  * [new branch]      feat/budget-analytics-data-explorer-v1   -> origin/feat/budget-analytics-data-explorer-v1
2026-08-08T19:19:35.3798110Z  * [new branch]      feat/budget-categories-duplicates-cleanup -> origin/feat/budget-categories-duplicates-cleanup
2026-08-08T19:19:35.3800758Z  * [new branch]      feat/budget-categories-ux-fix            -> origin/feat/budget-categories-ux-fix
2026-08-08T19:19:35.3802885Z  * [new branch]      feat/budget-import-production-v2         -> origin/feat/budget-import-production-v2
2026-08-08T19:19:35.3805332Z  * [new branch]      feat/budget-monthly-import-rule-learning-v1 -> origin/feat/budget-monthly-import-rule-learning-v1
2026-08-08T19:19:35.3809726Z  * [new branch]      feat/budget-phase-1-4                    -> origin/feat/budget-phase-1-4
2026-08-08T19:19:35.3812217Z  * [new branch]      feat/budget-planning-forecast-v1         -> origin/feat/budget-planning-forecast-v1
2026-08-08T19:19:35.3814682Z  * [new branch]      feat/budget-planning-usability-v2        -> origin/feat/budget-planning-usability-v2
2026-08-08T19:19:35.3817581Z  * [new branch]      feat/budget-review-bulk-assign-confirm   -> origin/feat/budget-review-bulk-assign-confirm
2026-08-08T19:19:35.3820227Z  * [new branch]      feat/budget-workflow-help-ux             -> origin/feat/budget-workflow-help-ux
2026-08-08T19:19:35.3823055Z  * [new branch]      feat/finance-command-center-monthly-close-v1 -> origin/feat/finance-command-center-monthly-close-v1
2026-08-08T19:19:35.3825453Z  * [new branch]      feat/fixed-costs-subscriptions-v1        -> origin/feat/fixed-costs-subscriptions-v1
2026-08-08T19:19:35.3828045Z  * [new branch]      feat/grocery-matching-review-learning-v2 -> origin/feat/grocery-matching-review-learning-v2
2026-08-08T19:19:35.3830905Z  * [new branch]      feat/grocery-product-price-providers-v1  -> origin/feat/grocery-product-price-providers-v1
2026-08-08T19:19:35.3833653Z  * [new branch]      feat/migros-product-savings-grocery-optimizer-v1 -> origin/feat/migros-product-savings-grocery-optimizer-v1
2026-08-08T19:19:35.3836665Z  * [new branch]      feat/mobile-nav-income-csv-final         -> origin/feat/mobile-nav-income-csv-final
2026-08-08T19:19:35.3839122Z  * [new branch]      feat/mobile-nav-income-hotfix-v2         -> origin/feat/mobile-nav-income-hotfix-v2
2026-08-08T19:19:35.3841787Z  * [new branch]      feat/mobile-nav-income-planning-v1       -> origin/feat/mobile-nav-income-planning-v1
2026-08-08T19:19:35.3844512Z  * [new branch]      fix/manual-entry-uat-flows               -> origin/fix/manual-entry-uat-flows
2026-08-08T19:19:35.3847566Z  * [new branch]      fix/sprint16.2-insurance-family-order    -> origin/fix/sprint16.2-insurance-family-order
2026-08-08T19:19:35.3850878Z  * [new branch]      hotfix/sprint13-global-portfolio-aggregation -> origin/hotfix/sprint13-global-portfolio-aggregation
2026-08-08T19:19:35.3854212Z  * [new branch]      hotfix/sprint20-wealth-history-contract  -> origin/hotfix/sprint20-wealth-history-contract
2026-08-08T19:19:35.3857494Z  * [new branch]      hotfix/sprint8-kpi-overflow              -> origin/hotfix/sprint8-kpi-overflow
2026-08-08T19:19:35.3860258Z  * [new branch]      hotfix/sprint8-readonly-render           -> origin/hotfix/sprint8-readonly-render
2026-08-08T19:19:35.3863319Z  * [new branch]      integration/portfolio-phase3-to-main     -> origin/integration/portfolio-phase3-to-main
2026-08-08T19:19:35.3866240Z  * [new branch]      main                                     -> origin/main
2026-08-08T19:19:35.3868695Z  * [new branch]      sprint10/portfolio-go-live               -> origin/sprint10/portfolio-go-live
2026-08-08T19:19:35.3871553Z  * [new branch]      sprint11/portfolio-completeness-ux       -> origin/sprint11/portfolio-completeness-ux
2026-08-08T19:19:35.3874517Z  * [new branch]      sprint12/truewealth-verified-import      -> origin/sprint12/truewealth-verified-import
2026-08-08T19:19:35.3877998Z  * [new branch]      sprint13/postfinance-ledger-import       -> origin/sprint13/postfinance-ledger-import
2026-08-08T19:19:35.3881384Z  * [new branch]      sprint16.1/classification-coverage-import-readiness -> origin/sprint16.1/classification-coverage-import-readiness
2026-08-08T19:19:35.3886107Z  * [new branch]      sprint16.2/first-import-calibration-portal-flow -> origin/sprint16.2/first-import-calibration-portal-flow
2026-08-08T19:19:35.3890634Z  * [new branch]      sprint16.3/import-readiness-batched-decisions-performance -> origin/sprint16.3/import-readiness-batched-decisions-performance
2026-08-08T19:19:35.3895224Z  * [new branch]      sprint17a/data-truth                     -> origin/sprint17a/data-truth
2026-08-08T19:19:35.3898369Z  * [new branch]      sprint17b/equity-quote-refresh           -> origin/sprint17b/equity-quote-refresh
2026-08-08T19:19:35.3902142Z  * [new branch]      sprint17b/household-cockpit              -> origin/sprint17b/household-cockpit
2026-08-08T19:19:35.3905806Z  * [new branch]      sprint17c/data-truth-navigation-today-lite -> origin/sprint17c/data-truth-navigation-today-lite
2026-08-08T19:19:35.3910263Z  * [new branch]      sprint19/prior-year-actuals-simple-budget-v1 -> origin/sprint19/prior-year-actuals-simple-budget-v1
2026-08-08T19:19:35.3917222Z  * [new branch]      sprint2/navigation-design-shell          -> origin/sprint2/navigation-design-shell
2026-08-08T19:19:35.3921125Z  * [new branch]      sprint20/performance-data-readiness-v1   -> origin/sprint20/performance-data-readiness-v1
2026-08-08T19:19:35.3924875Z  * [new branch]      sprint20b/performance-activation-daily-valuations-v1 -> origin/sprint20b/performance-activation-daily-valuations-v1
2026-08-08T19:19:35.3931936Z  * [new branch]      sprint20e/market-data-recovery-crypto-activation-v1 -> origin/sprint20e/market-data-recovery-crypto-activation-v1
2026-08-08T19:19:35.3940275Z  * [new branch]      sprint20e/never-run-status-hotfix        -> origin/sprint20e/never-run-status-hotfix
2026-08-08T19:19:35.3943160Z  * [new branch]      sprint20e/provider-provenance-ui-hotfix  -> origin/sprint20e/provider-provenance-ui-hotfix
2026-08-08T19:19:35.3947090Z  * [new branch]      sprint20f/truewealth-first-performance-activation -> origin/sprint20f/truewealth-first-performance-activation
2026-08-08T19:19:35.3950857Z  * [new branch]      sprint3.1/reconciliation-semantic-hardening -> origin/sprint3.1/reconciliation-semantic-hardening
2026-08-08T19:19:35.3954323Z  * [new branch]      sprint3/reconciliation-snapshot-foundation -> origin/sprint3/reconciliation-snapshot-foundation
2026-08-08T19:19:35.3958214Z  * [new branch]      sprint4.1/portfolio-policy-contract-hardening -> origin/sprint4.1/portfolio-policy-contract-hardening
2026-08-08T19:19:35.3961530Z  * [new branch]      sprint4/portfolio-policy-foundation      -> origin/sprint4/portfolio-policy-foundation
2026-08-08T19:19:35.3964605Z  * [new branch]      sprint5/portfolio-performance-foundation -> origin/sprint5/portfolio-performance-foundation
2026-08-08T19:19:35.3968489Z  * [new branch]      sprint6/portfolio-data-ingestion-reconciliation -> origin/sprint6/portfolio-data-ingestion-reconciliation
2026-08-08T19:19:35.3971748Z  * [new branch]      sprint7/postfinance-portfolio-source     -> origin/sprint7/postfinance-portfolio-source
2026-08-08T19:19:35.3974574Z  * [new branch]      sprint8/market-fx-benchmark-risk         -> origin/sprint8/market-fx-benchmark-risk
2026-08-08T19:19:35.3977587Z  * [new branch]      sprint9/portfolio-basis-policy           -> origin/sprint9/portfolio-basis-policy
2026-08-08T19:19:35.3979981Z  * [new tag]         v0.3.0                                   -> v0.3.0
2026-08-08T19:19:35.3981794Z  * [new tag]         v0.3.1                                   -> v0.3.1
2026-08-08T19:19:35.3983538Z  * [new tag]         v0.3.2                                   -> v0.3.2
2026-08-08T19:19:35.3985817Z  * [new ref]         29375c19a23023cc92aae98d7f3c56b59ae72b29 -> pull/45/merge
2026-08-08T19:19:35.3993953Z ##[endgroup]
2026-08-08T19:19:35.3996597Z ##[group]Determining the checkout info
2026-08-08T19:19:35.3999594Z ##[endgroup]
2026-08-08T19:19:35.4001376Z [command]/usr/bin/git sparse-checkout disable
2026-08-08T19:19:35.4071475Z [command]/usr/bin/git config --local --unset-all extensions.worktreeConfig
2026-08-08T19:19:35.4116358Z ##[group]Checking out the ref
2026-08-08T19:19:35.4120396Z [command]/usr/bin/git checkout --progress --force refs/remotes/pull/45/merge
2026-08-08T19:19:35.4699215Z Note: switching to 'refs/remotes/pull/45/merge'.
2026-08-08T19:19:35.4705979Z 
2026-08-08T19:19:35.4708212Z You are in 'detached HEAD' state. You can look around, make experimental
2026-08-08T19:19:35.4710437Z changes and commit them, and you can discard any commits you make in this
2026-08-08T19:19:35.4722416Z state without impacting any branches by switching back to a branch.
2026-08-08T19:19:35.4723980Z 
2026-08-08T19:19:35.4725265Z If you want to create a new branch to retain commits you create, you may
2026-08-08T19:19:35.4728048Z do so (now or later) by using -c with the switch command. Example:
2026-08-08T19:19:35.4729496Z 
2026-08-08T19:19:35.4730688Z   git switch -c <new-branch-name>
2026-08-08T19:19:35.4731809Z 
2026-08-08T19:19:35.4733164Z Or undo this operation with:
2026-08-08T19:19:35.4733958Z 
2026-08-08T19:19:35.4736106Z   git switch -
2026-08-08T19:19:35.4737252Z 
2026-08-08T19:19:35.4744524Z Turn off this advice by setting config variable advice.detachedHead to false
2026-08-08T19:19:35.4746262Z 
2026-08-08T19:19:35.4747940Z HEAD is now at 29375c1 Merge fc61b2315ce6c84101999afdba38a40b2bd82e77 into a9609cecbda474355f02a20a286214195cad1df3
2026-08-08T19:19:35.4752727Z ##[endgroup]
2026-08-08T19:19:35.4779349Z [command]/usr/bin/git log -1 --format=%H
2026-08-08T19:19:35.4816385Z 29375c19a23023cc92aae98d7f3c56b59ae72b29
2026-08-08T19:19:35.5243884Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T19:19:35.5247386Z ##[group]Run actions/setup-python@v5
2026-08-08T19:19:35.5248314Z with:
2026-08-08T19:19:35.5249097Z   python-version: 3.11
2026-08-08T19:19:35.5249923Z   cache: pip
2026-08-08T19:19:35.5250768Z   cache-dependency-path: requirements-ci.txt
2026-08-08T19:19:35.5251735Z   check-latest: false
2026-08-08T19:19:35.5256698Z   token: ***
2026-08-08T19:19:35.5257505Z   update-environment: true
2026-08-08T19:19:35.5258371Z   allow-prereleases: false
2026-08-08T19:19:35.5259219Z   freethreaded: false
2026-08-08T19:19:35.5260043Z env:
2026-08-08T19:19:35.5260796Z   PYTHONPATH: src
2026-08-08T19:19:35.5261615Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:19:35.5262766Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:19:35.5264175Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:19:35.5265574Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:19:35.5266651Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:19:35.5267545Z ##[endgroup]
2026-08-08T19:19:35.6699096Z ##[group]Installed versions
2026-08-08T19:19:35.6783010Z (node:2015) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-08-08T19:19:35.6785760Z Successfully set up CPython (3.11.15)
2026-08-08T19:19:35.6788959Z ##[endgroup]
2026-08-08T19:19:35.6794413Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-08-08T19:19:35.7366876Z [command]/opt/hostedtoolcache/Python/3.11.15/x64/bin/pip cache dir
2026-08-08T19:19:36.0726689Z /home/runner/.cache/pip
2026-08-08T19:19:36.1900851Z pip cache is not found
2026-08-08T19:19:36.2070467Z ##[group]Run python -m pip install -e . -r requirements-ci.txt
2026-08-08T19:19:36.2071886Z [36;1mpython -m pip install -e . -r requirements-ci.txt[0m
2026-08-08T19:19:36.2131928Z shell: /usr/bin/bash -e {0}
2026-08-08T19:19:36.2132553Z env:
2026-08-08T19:19:36.2133268Z   PYTHONPATH: src
2026-08-08T19:19:36.2134446Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:19:36.2136454Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:19:36.2138276Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:19:36.2139842Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:19:36.2140945Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:19:36.2141876Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:19:36.2143230Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T19:19:36.2144640Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:19:36.2146158Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:19:36.2147399Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:19:36.2148658Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T19:19:36.2149661Z ##[endgroup]
2026-08-08T19:19:36.9466562Z Obtaining file:///home/runner/work/FinanceManager/FinanceManager
2026-08-08T19:19:36.9483009Z   Installing build dependencies: started
2026-08-08T19:19:37.7007162Z   Installing build dependencies: finished with status 'done'
2026-08-08T19:19:37.7012487Z   Checking if build backend supports build_editable: started
2026-08-08T19:19:38.0802180Z   Checking if build backend supports build_editable: finished with status 'done'
2026-08-08T19:19:38.0803773Z   Getting requirements to build editable: started
2026-08-08T19:19:38.4376962Z   Getting requirements to build editable: finished with status 'done'
2026-08-08T19:19:38.4407777Z   Preparing editable metadata (pyproject.toml): started
2026-08-08T19:19:38.6422731Z   Preparing editable metadata (pyproject.toml): finished with status 'done'
2026-08-08T19:19:38.7584597Z Collecting fastapi==0.136.1 (from -r requirements-ci.txt (line 1))
2026-08-08T19:19:38.8184074Z   Downloading fastapi-0.136.1-py3-none-any.whl.metadata (28 kB)
2026-08-08T19:19:38.8487242Z Collecting httpx==0.28.1 (from -r requirements-ci.txt (line 2))
2026-08-08T19:19:38.8586862Z   Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB)
2026-08-08T19:19:38.8766552Z Collecting Jinja2==3.1.6 (from -r requirements-ci.txt (line 3))
2026-08-08T19:19:38.8845221Z   Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
2026-08-08T19:19:38.9046345Z Collecting openpyxl==3.1.5 (from -r requirements-ci.txt (line 4))
2026-08-08T19:19:38.9131848Z   Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
2026-08-08T19:19:39.0238670Z Collecting pandas==3.0.3 (from -r requirements-ci.txt (line 5))
2026-08-08T19:19:39.0336970Z   Downloading pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (79 kB)
2026-08-08T19:19:39.0970128Z Collecting plotly==6.7.0 (from -r requirements-ci.txt (line 6))
2026-08-08T19:19:39.1069455Z   Downloading plotly-6.7.0-py3-none-any.whl.metadata (8.6 kB)
2026-08-08T19:19:39.2046804Z Collecting pydantic==2.13.4 (from -r requirements-ci.txt (line 7))
2026-08-08T19:19:39.2136941Z   Downloading pydantic-2.13.4-py3-none-any.whl.metadata (109 kB)
2026-08-08T19:19:39.2456991Z Collecting pypdf==6.14.2 (from -r requirements-ci.txt (line 8))
2026-08-08T19:19:39.2533027Z   Downloading pypdf-6.14.2-py3-none-any.whl.metadata (7.2 kB)
2026-08-08T19:19:39.2808783Z Collecting pytest==9.0.2 (from -r requirements-ci.txt (line 9))
2026-08-08T19:19:39.2896278Z   Downloading pytest-9.0.2-py3-none-any.whl.metadata (7.6 kB)
2026-08-08T19:19:39.6112068Z Collecting ruff==0.15.13 (from -r requirements-ci.txt (line 10))
2026-08-08T19:19:39.6266701Z   Downloading ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (26 kB)
2026-08-08T19:19:39.6627797Z Collecting streamlit==1.57.0 (from -r requirements-ci.txt (line 11))
2026-08-08T19:19:39.6728316Z   Downloading streamlit-1.57.0-py3-none-any.whl.metadata (9.6 kB)
2026-08-08T19:19:39.7014668Z Collecting uvicorn==0.47.0 (from -r requirements-ci.txt (line 12))
2026-08-08T19:19:39.7113748Z   Downloading uvicorn-0.47.0-py3-none-any.whl.metadata (6.7 kB)
2026-08-08T19:19:39.7284678Z Collecting xlrd==2.0.2 (from -r requirements-ci.txt (line 13))
2026-08-08T19:19:39.7368679Z   Downloading xlrd-2.0.2-py2.py3-none-any.whl.metadata (3.5 kB)
2026-08-08T19:19:39.7626702Z Collecting yfinance==1.3.0 (from -r requirements-ci.txt (line 14))
2026-08-08T19:19:39.7740910Z   Downloading yfinance-1.3.0-py2.py3-none-any.whl.metadata (6.1 kB)
2026-08-08T19:19:39.8006875Z Collecting starlette>=0.46.0 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T19:19:39.8098305Z   Downloading starlette-1.6.0-py3-none-any.whl.metadata (6.4 kB)
2026-08-08T19:19:39.8316117Z Collecting typing-extensions>=4.8.0 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T19:19:39.8398077Z   Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)
2026-08-08T19:19:39.8547351Z Collecting typing-inspection>=0.4.2 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T19:19:39.8640207Z   Downloading typing_inspection-0.4.2-py3-none-any.whl.metadata (2.6 kB)
2026-08-08T19:19:39.8796871Z Collecting annotated-doc>=0.0.2 (from fastapi==0.136.1->-r requirements-ci.txt (line 1))
2026-08-08T19:19:39.8875874Z   Downloading annotated_doc-0.0.5-py3-none-any.whl.metadata (6.5 kB)
2026-08-08T19:19:39.9117768Z Collecting anyio (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T19:19:39.9197927Z   Downloading anyio-4.14.2-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T19:19:39.9416451Z Collecting certifi (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T19:19:39.9508560Z   Downloading certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T19:19:39.9697857Z Collecting httpcore==1.* (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T19:19:39.9775164Z   Downloading httpcore-1.0.9-py3-none-any.whl.metadata (21 kB)
2026-08-08T19:19:39.9963110Z Collecting idna (from httpx==0.28.1->-r requirements-ci.txt (line 2))
2026-08-08T19:19:40.0036977Z   Downloading idna-3.18-py3-none-any.whl.metadata (6.1 kB)
2026-08-08T19:19:40.0492111Z Collecting MarkupSafe>=2.0 (from Jinja2==3.1.6->-r requirements-ci.txt (line 3))
2026-08-08T19:19:40.0569882Z   Downloading markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB)
2026-08-08T19:19:40.0713237Z Collecting et-xmlfile (from openpyxl==3.1.5->-r requirements-ci.txt (line 4))
2026-08-08T19:19:40.0791608Z   Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
2026-08-08T19:19:40.3021905Z Collecting numpy>=1.26.0 (from pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T19:19:40.3100591Z   Downloading numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (6.6 kB)
2026-08-08T19:19:40.3270061Z Collecting python-dateutil>=2.8.2 (from pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T19:19:40.3346233Z   Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
2026-08-08T19:19:40.3690553Z Collecting narwhals>=1.15.1 (from plotly==6.7.0->-r requirements-ci.txt (line 6))
2026-08-08T19:19:40.3773246Z   Downloading narwhals-2.24.0-py3-none-any.whl.metadata (15 kB)
2026-08-08T19:19:40.3986303Z Collecting packaging (from plotly==6.7.0->-r requirements-ci.txt (line 6))
2026-08-08T19:19:40.4064046Z   Downloading packaging-26.3-py3-none-any.whl.metadata (3.5 kB)
2026-08-08T19:19:40.4212378Z Collecting annotated-types>=0.6.0 (from pydantic==2.13.4->-r requirements-ci.txt (line 7))
2026-08-08T19:19:40.4294827Z   Downloading annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB)
2026-08-08T19:19:40.9960437Z Collecting pydantic-core==2.46.4 (from pydantic==2.13.4->-r requirements-ci.txt (line 7))
2026-08-08T19:19:41.0039788Z   Downloading pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
2026-08-08T19:19:41.0224495Z Collecting iniconfig>=1.0.1 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T19:19:41.0299643Z   Downloading iniconfig-2.3.0-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T19:19:41.0469449Z Collecting pluggy<2,>=1.5 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T19:19:41.0545222Z   Downloading pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)
2026-08-08T19:19:41.1037148Z Collecting pygments>=2.7.2 (from pytest==9.0.2->-r requirements-ci.txt (line 9))
2026-08-08T19:19:41.1114702Z   Downloading pygments-2.20.0-py3-none-any.whl.metadata (2.5 kB)
2026-08-08T19:19:41.1326737Z Collecting altair!=5.4.0,!=5.4.1,<7,>=4.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.1402748Z   Downloading altair-6.2.2-py3-none-any.whl.metadata (11 kB)
2026-08-08T19:19:41.1580831Z Collecting blinker<2,>=1.5.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.1654569Z   Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)
2026-08-08T19:19:41.1940109Z Collecting cachetools<8,>=5.5 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.2014667Z   Downloading cachetools-7.1.7-py3-none-any.whl.metadata (5.5 kB)
2026-08-08T19:19:41.2199824Z Collecting click<9,>=7.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.2285908Z   Downloading click-8.4.2-py3-none-any.whl.metadata (2.6 kB)
2026-08-08T19:19:41.2521660Z Collecting gitpython!=3.1.19,<4,>=3.0.7 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.2598312Z   Downloading gitpython-3.1.58-py3-none-any.whl.metadata (13 kB)
2026-08-08T19:19:41.4029651Z Collecting pillow<13,>=7.1.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.4117746Z   Downloading pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (9.1 kB)
2026-08-08T19:19:41.4310630Z Collecting pydeck<1,>=0.8.0b4 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.4388772Z   Downloading pydeck-0.9.3-py2.py3-none-any.whl.metadata (4.2 kB)
2026-08-08T19:19:41.5628628Z Collecting protobuf<8,>=3.20 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.5707936Z   Downloading protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl.metadata (595 bytes)
2026-08-08T19:19:41.7047427Z Collecting pyarrow>=7.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.7129495Z   Downloading pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (3.0 kB)
2026-08-08T19:19:41.7378630Z Collecting requests<3,>=2.27 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.7463255Z   Downloading requests-2.34.2-py3-none-any.whl.metadata (4.8 kB)
2026-08-08T19:19:41.7672006Z Collecting tenacity<10,>=8.1.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.7753019Z   Downloading tenacity-9.1.4-py3-none-any.whl.metadata (1.2 kB)
2026-08-08T19:19:41.7914220Z Collecting toml<2,>=0.10.1 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.7999270Z   Downloading toml-0.10.2-py2.py3-none-any.whl.metadata (7.1 kB)
2026-08-08T19:19:41.8382845Z Collecting httptools>=0.6.3 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.8464532Z   Downloading httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (3.5 kB)
2026-08-08T19:19:41.8652955Z Collecting python-multipart>=0.0.10 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.8736453Z   Downloading python_multipart-0.0.32-py3-none-any.whl.metadata (2.1 kB)
2026-08-08T19:19:41.9676703Z Collecting websockets>=12.0.0 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:41.9765352Z   Downloading websockets-17.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (6.3 kB)
2026-08-08T19:19:41.9916724Z Collecting itsdangerous>=2.1.2 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.0005405Z   Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
2026-08-08T19:19:42.0406581Z Collecting watchdog<7,>=2.1.5 (from streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.0479963Z   Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl.metadata (44 kB)
2026-08-08T19:19:42.0685954Z Collecting h11>=0.8 (from uvicorn==0.47.0->-r requirements-ci.txt (line 12))
2026-08-08T19:19:42.0764343Z   Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
2026-08-08T19:19:42.0973400Z Collecting multitasking>=0.0.7 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.1054703Z   Downloading multitasking-0.0.13-py3-none-any.whl.metadata (16 kB)
2026-08-08T19:19:42.1279654Z Collecting platformdirs>=2.0.0 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.1363834Z   Downloading platformdirs-4.11.1-py3-none-any.whl.metadata (5.5 kB)
2026-08-08T19:19:42.1711301Z Collecting pytz>=2022.5 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.1790145Z   Downloading pytz-2026.3.post1-py2.py3-none-any.whl.metadata (22 kB)
2026-08-08T19:19:42.2201798Z Collecting frozendict>=2.3.4 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.2279526Z   Downloading frozendict-2.4.7-py3-none-any.whl.metadata (23 kB)
2026-08-08T19:19:42.2499192Z Collecting peewee>=3.16.2 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.2575344Z   Downloading peewee-4.3.0-py3-none-any.whl.metadata (10 kB)
2026-08-08T19:19:42.2763672Z Collecting beautifulsoup4>=4.11.1 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.2846351Z   Downloading beautifulsoup4-4.15.0-py3-none-any.whl.metadata (3.8 kB)
2026-08-08T19:19:42.3363284Z Collecting curl_cffi>=0.15 (from yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.3442045Z   Downloading curl_cffi-0.16.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (17 kB)
2026-08-08T19:19:42.4062819Z Collecting jsonschema>=3.0 (from altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.4134244Z   Downloading jsonschema-4.26.0-py3-none-any.whl.metadata (7.6 kB)
2026-08-08T19:19:42.4354338Z Collecting gitdb<5,>=4.0.1 (from gitpython!=3.1.19,<4,>=3.0.7->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.4497251Z   Downloading gitdb-4.0.12-py3-none-any.whl.metadata (1.2 kB)
2026-08-08T19:19:42.4645321Z Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython!=3.1.19,<4,>=3.0.7->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.4722427Z   Downloading smmap-5.0.3-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T19:19:42.5668577Z Collecting charset_normalizer<4,>=2 (from requests<3,>=2.27->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.5747024Z   Downloading charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (41 kB)
2026-08-08T19:19:42.6501549Z Collecting urllib3<3,>=1.26 (from requests<3,>=2.27->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.6582049Z   Downloading urllib3-2.7.0-py3-none-any.whl.metadata (6.9 kB)
2026-08-08T19:19:42.6876370Z Collecting soupsieve>=1.6.1 (from beautifulsoup4>=4.11.1->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.6944460Z   Downloading soupsieve-2.9.2-py3-none-any.whl.metadata (4.6 kB)
2026-08-08T19:19:42.7856844Z Collecting cffi>=2.0.0 (from curl_cffi>=0.15->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.7942474Z   Downloading cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.5 kB)
2026-08-08T19:19:42.8115201Z Collecting pycparser (from cffi>=2.0.0->curl_cffi>=0.15->yfinance==1.3.0->-r requirements-ci.txt (line 14))
2026-08-08T19:19:42.8192325Z   Downloading pycparser-3.0-py3-none-any.whl.metadata (8.2 kB)
2026-08-08T19:19:42.8392419Z Collecting attrs>=22.2.0 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.8468009Z   Downloading attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB)
2026-08-08T19:19:42.8624478Z Collecting jsonschema-specifications>=2023.03.6 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.8709647Z   Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl.metadata (2.9 kB)
2026-08-08T19:19:42.8915859Z Collecting referencing>=0.28.4 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:42.8991579Z   Downloading referencing-0.37.0-py3-none-any.whl.metadata (2.8 kB)
2026-08-08T19:19:43.1128334Z Collecting rpds-py>=0.25.0 (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit==1.57.0->-r requirements-ci.txt (line 11))
2026-08-08T19:19:43.1210631Z   Downloading rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)
2026-08-08T19:19:43.1439197Z Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas==3.0.3->-r requirements-ci.txt (line 5))
2026-08-08T19:19:43.1515787Z   Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
2026-08-08T19:19:43.1746140Z Downloading fastapi-0.136.1-py3-none-any.whl (117 kB)
2026-08-08T19:19:43.1919884Z Downloading httpx-0.28.1-py3-none-any.whl (73 kB)
2026-08-08T19:19:43.2063125Z Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)
2026-08-08T19:19:43.2234804Z Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
2026-08-08T19:19:43.2485726Z Downloading pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (11.3 MB)
2026-08-08T19:19:43.4908770Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3/11.3 MB 49.1 MB/s  0:00:00
2026-08-08T19:19:43.4987257Z Downloading plotly-6.7.0-py3-none-any.whl (9.9 MB)
2026-08-08T19:19:43.5951007Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.9/9.9 MB 108.0 MB/s  0:00:00
2026-08-08T19:19:43.6031946Z Downloading pydantic-2.13.4-py3-none-any.whl (472 kB)
2026-08-08T19:19:43.6166321Z Downloading pypdf-6.14.2-py3-none-any.whl (349 kB)
2026-08-08T19:19:43.6264469Z Downloading pytest-9.0.2-py3-none-any.whl (374 kB)
2026-08-08T19:19:43.6372796Z Downloading ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB)
2026-08-08T19:19:43.7006741Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 188.5 MB/s  0:00:00
2026-08-08T19:19:43.7100638Z Downloading streamlit-1.57.0-py3-none-any.whl (9.2 MB)
2026-08-08T19:19:43.7676284Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2/9.2 MB 169.0 MB/s  0:00:00
2026-08-08T19:19:43.7745987Z Downloading uvicorn-0.47.0-py3-none-any.whl (71 kB)
2026-08-08T19:19:43.7835917Z Downloading xlrd-2.0.2-py2.py3-none-any.whl (96 kB)
2026-08-08T19:19:43.7955964Z Downloading yfinance-1.3.0-py2.py3-none-any.whl (133 kB)
2026-08-08T19:19:43.8052504Z Downloading pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
2026-08-08T19:19:43.8179187Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 206.4 MB/s  0:00:00
2026-08-08T19:19:43.8249604Z Downloading altair-6.2.2-py3-none-any.whl (797 kB)
2026-08-08T19:19:43.8323781Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 797.6/797.6 kB 141.5 MB/s  0:00:00
2026-08-08T19:19:43.8396153Z Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB)
2026-08-08T19:19:43.8484557Z Downloading cachetools-7.1.7-py3-none-any.whl (16 kB)
2026-08-08T19:19:43.8586128Z Downloading click-8.4.2-py3-none-any.whl (119 kB)
2026-08-08T19:19:43.8686618Z Downloading gitpython-3.1.58-py3-none-any.whl (220 kB)
2026-08-08T19:19:43.8792074Z Downloading gitdb-4.0.12-py3-none-any.whl (62 kB)
2026-08-08T19:19:43.8876340Z Downloading httpcore-1.0.9-py3-none-any.whl (78 kB)
2026-08-08T19:19:43.8976575Z Downloading numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.9 MB)
2026-08-08T19:19:43.9573511Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.9/16.9 MB 291.1 MB/s  0:00:00
2026-08-08T19:19:43.9654477Z Downloading pillow-12.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.9 MB)
2026-08-08T19:19:43.9907751Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.9/6.9 MB 295.8 MB/s  0:00:00
2026-08-08T19:19:43.9987850Z Downloading pluggy-1.6.0-py3-none-any.whl (20 kB)
2026-08-08T19:19:44.0091419Z Downloading protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl (327 kB)
2026-08-08T19:19:44.0200245Z Downloading pydeck-0.9.3-py2.py3-none-any.whl (11.4 MB)
2026-08-08T19:19:44.0890678Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.4/11.4 MB 170.4 MB/s  0:00:00
2026-08-08T19:19:44.0971439Z Downloading requests-2.34.2-py3-none-any.whl (73 kB)
2026-08-08T19:19:44.1075483Z Downloading charset_normalizer-3.4.9-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (221 kB)
2026-08-08T19:19:44.1182764Z Downloading idna-3.18-py3-none-any.whl (65 kB)
2026-08-08T19:19:44.1290051Z Downloading smmap-5.0.3-py3-none-any.whl (24 kB)
2026-08-08T19:19:44.1390597Z Downloading tenacity-9.1.4-py3-none-any.whl (28 kB)
2026-08-08T19:19:44.1492781Z Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
2026-08-08T19:19:44.1594659Z Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB)
2026-08-08T19:19:44.1704726Z Downloading urllib3-2.7.0-py3-none-any.whl (131 kB)
2026-08-08T19:19:44.1827308Z Downloading watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl (79 kB)
2026-08-08T19:19:44.1935456Z Downloading annotated_doc-0.0.5-py3-none-any.whl (5.3 kB)
2026-08-08T19:19:44.2042779Z Downloading annotated_types-0.8.0-py3-none-any.whl (13 kB)
2026-08-08T19:19:44.2149931Z Downloading anyio-4.14.2-py3-none-any.whl (125 kB)
2026-08-08T19:19:44.2263458Z Downloading beautifulsoup4-4.15.0-py3-none-any.whl (109 kB)
2026-08-08T19:19:44.2370456Z Downloading certifi-2026.7.22-py3-none-any.whl (136 kB)
2026-08-08T19:19:44.2477056Z Downloading curl_cffi-0.16.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (13.5 MB)
2026-08-08T19:19:44.3659763Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.5/13.5 MB 115.6 MB/s  0:00:00
2026-08-08T19:19:44.3740082Z Downloading cffi-2.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (217 kB)
2026-08-08T19:19:44.3840997Z Downloading frozendict-2.4.7-py3-none-any.whl (16 kB)
2026-08-08T19:19:44.3934659Z Downloading h11-0.16.0-py3-none-any.whl (37 kB)
2026-08-08T19:19:44.4037044Z Downloading httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (464 kB)
2026-08-08T19:19:44.4156008Z Downloading iniconfig-2.3.0-py3-none-any.whl (7.5 kB)
2026-08-08T19:19:44.5109536Z Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
2026-08-08T19:19:44.5206316Z Downloading jsonschema-4.26.0-py3-none-any.whl (90 kB)
2026-08-08T19:19:44.5308181Z Downloading attrs-26.1.0-py3-none-any.whl (67 kB)
2026-08-08T19:19:44.5407776Z Downloading jsonschema_specifications-2025.9.1-py3-none-any.whl (18 kB)
2026-08-08T19:19:44.5500854Z Downloading markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB)
2026-08-08T19:19:44.5594345Z Downloading multitasking-0.0.13-py3-none-any.whl (16 kB)
2026-08-08T19:19:44.5697172Z Downloading narwhals-2.24.0-py3-none-any.whl (461 kB)
2026-08-08T19:19:44.5806060Z Downloading packaging-26.3-py3-none-any.whl (129 kB)
2026-08-08T19:19:44.5904856Z Downloading peewee-4.3.0-py3-none-any.whl (179 kB)
2026-08-08T19:19:44.6002509Z Downloading platformdirs-4.11.1-py3-none-any.whl (23 kB)
2026-08-08T19:19:44.6099548Z Downloading pyarrow-25.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (50.1 MB)
2026-08-08T19:19:44.7591431Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.1/50.1 MB 340.1 MB/s  0:00:00
2026-08-08T19:19:44.7675135Z Downloading pygments-2.20.0-py3-none-any.whl (1.2 MB)
2026-08-08T19:19:44.7746696Z    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 234.1 MB/s  0:00:00
2026-08-08T19:19:44.7827888Z Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
2026-08-08T19:19:44.7926874Z Downloading python_multipart-0.0.32-py3-none-any.whl (30 kB)
2026-08-08T19:19:44.8040949Z Downloading pytz-2026.3.post1-py2.py3-none-any.whl (508 kB)
2026-08-08T19:19:44.8150699Z Downloading referencing-0.37.0-py3-none-any.whl (26 kB)
2026-08-08T19:19:44.8248646Z Downloading rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (371 kB)
2026-08-08T19:19:44.8349124Z Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
2026-08-08T19:19:44.8450077Z Downloading soupsieve-2.9.2-py3-none-any.whl (37 kB)
2026-08-08T19:19:44.8539023Z Downloading starlette-1.6.0-py3-none-any.whl (75 kB)
2026-08-08T19:19:44.8635887Z Downloading typing_inspection-0.4.2-py3-none-any.whl (14 kB)
2026-08-08T19:19:44.8728605Z Downloading websockets-17.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (219 kB)
2026-08-08T19:19:44.8825388Z Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
2026-08-08T19:19:44.8914206Z Downloading pycparser-3.0-py3-none-any.whl (48 kB)
2026-08-08T19:19:45.1320522Z Building wheels for collected packages: jarvis-finance
2026-08-08T19:19:45.1322978Z   Building editable for jarvis-finance (pyproject.toml): started
2026-08-08T19:19:45.3597188Z   Building editable for jarvis-finance (pyproject.toml): finished with status 'done'
2026-08-08T19:19:45.3606789Z   Created wheel for jarvis-finance: filename=jarvis_finance-0.1.0-0.editable-py3-none-any.whl size=1510 sha256=03653f4078ab2bfe26d7b79436d2f09e6bbe51e244d7fbab99d83145e25fc0ce
2026-08-08T19:19:45.3625992Z   Stored in directory: /tmp/pip-ephem-wheel-cache-ks0hl5ez/wheels/ad/81/a6/5383a3c32505f4e59976cc011a336e07c6284dcaf35f5a7ea5
2026-08-08T19:19:45.3627235Z Successfully built jarvis-finance
2026-08-08T19:19:45.5035443Z Installing collected packages: pytz, multitasking, xlrd, websockets, watchdog, urllib3, typing-extensions, toml, tenacity, soupsieve, smmap, six, ruff, rpds-py, python-multipart, pypdf, pygments, pycparser, pyarrow, protobuf, pluggy, platformdirs, pillow, peewee, packaging, numpy, narwhals, MarkupSafe, itsdangerous, iniconfig, idna, httptools, h11, frozendict, et-xmlfile, click, charset_normalizer, certifi, cachetools, blinker, attrs, annotated-types, annotated-doc, uvicorn, typing-inspection, requests, referencing, python-dateutil, pytest, pydantic-core, plotly, openpyxl, Jinja2, httpcore, gitdb, cffi, beautifulsoup4, anyio, starlette, pydeck, pydantic, pandas, jsonschema-specifications, jarvis-finance, httpx, gitpython, curl_cffi, yfinance, jsonschema, fastapi, altair, streamlit
2026-08-08T19:20:02.4525777Z 
2026-08-08T19:20:02.4559666Z Successfully installed Jinja2-3.1.6 MarkupSafe-3.0.3 altair-6.2.2 annotated-doc-0.0.5 annotated-types-0.8.0 anyio-4.14.2 attrs-26.1.0 beautifulsoup4-4.15.0 blinker-1.9.0 cachetools-7.1.7 certifi-2026.7.22 cffi-2.1.1 charset_normalizer-3.4.9 click-8.4.2 curl_cffi-0.16.0 et-xmlfile-2.0.0 fastapi-0.136.1 frozendict-2.4.7 gitdb-4.0.12 gitpython-3.1.58 h11-0.16.0 httpcore-1.0.9 httptools-0.8.0 httpx-0.28.1 idna-3.18 iniconfig-2.3.0 itsdangerous-2.2.0 jarvis-finance-0.1.0 jsonschema-4.26.0 jsonschema-specifications-2025.9.1 multitasking-0.0.13 narwhals-2.24.0 numpy-2.4.6 openpyxl-3.1.5 packaging-26.3 pandas-3.0.3 peewee-4.3.0 pillow-12.3.0 platformdirs-4.11.1 plotly-6.7.0 pluggy-1.6.0 protobuf-7.35.1 pyarrow-25.0.0 pycparser-3.0 pydantic-2.13.4 pydantic-core-2.46.4 pydeck-0.9.3 pygments-2.20.0 pypdf-6.14.2 pytest-9.0.2 python-dateutil-2.9.0.post0 python-multipart-0.0.32 pytz-2026.3.post1 referencing-0.37.0 requests-2.34.2 rpds-py-2026.6.3 ruff-0.15.13 six-1.17.0 smmap-5.0.3 soupsieve-2.9.2 starlette-1.6.0 streamlit-1.57.0 tenacity-9.1.4 toml-0.10.2 typing-extensions-4.16.0 typing-inspection-0.4.2 urllib3-2.7.0 uvicorn-0.47.0 watchdog-6.0.0 websockets-17.0.1 xlrd-2.0.2 yfinance-1.3.0
2026-08-08T19:20:02.4585586Z 
2026-08-08T19:20:02.4586308Z [notice] A new release of pip is available: 26.1.2 -> 26.2.1
2026-08-08T19:20:02.4587095Z [notice] To update, run: pip install --upgrade pip
2026-08-08T19:20:02.7597983Z ##[group]Run git diff --check "origin/${GITHUB_BASE_REF:-main}...HEAD"
2026-08-08T19:20:02.7598515Z [36;1mgit diff --check "origin/${GITHUB_BASE_REF:-main}...HEAD"[0m
2026-08-08T19:20:02.7648096Z shell: /usr/bin/bash -e {0}
2026-08-08T19:20:02.7648565Z env:
2026-08-08T19:20:02.7648776Z   PYTHONPATH: src
2026-08-08T19:20:02.7649015Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:20:02.7649397Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:20:02.7649918Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:20:02.7650379Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:20:02.7650735Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:20:02.7651066Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7651487Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T19:20:02.7651954Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7652337Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7652723Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7653118Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T19:20:02.7653452Z ##[endgroup]
2026-08-08T19:20:02.7824747Z ##[group]Run python -m jarvis_finance.cli.main git-safety-scan .
2026-08-08T19:20:02.7825606Z [36;1mpython -m jarvis_finance.cli.main git-safety-scan .[0m
2026-08-08T19:20:02.7872643Z shell: /usr/bin/bash -e {0}
2026-08-08T19:20:02.7872910Z env:
2026-08-08T19:20:02.7873124Z   PYTHONPATH: src
2026-08-08T19:20:02.7873358Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:20:02.7873739Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:20:02.7874254Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:20:02.7874713Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:20:02.7875373Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:20:02.7875708Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7876140Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T19:20:02.7876657Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7877042Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7877416Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:02.7877794Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T19:20:02.7878122Z ##[endgroup]
2026-08-08T19:20:04.0889320Z GIT_SAFETY_OK
2026-08-08T19:20:04.1186838Z ##[group]Run python -m ruff check \
2026-08-08T19:20:04.1187403Z [36;1mpython -m ruff check \[0m
2026-08-08T19:20:04.1187848Z [36;1m  scripts/ci_portfolio_phase3_gate.py \[0m
2026-08-08T19:20:04.1188345Z [36;1m  src/jarvis_finance/api/main.py \[0m
2026-08-08T19:20:04.1188832Z [36;1m  src/jarvis_finance/api/routers/overview.py \[0m
2026-08-08T19:20:04.1189238Z [36;1m  src/jarvis_finance/api/schemas/portfolio_data.py \[0m
2026-08-08T19:20:04.1189699Z [36;1m  src/jarvis_finance/api/schemas/portfolio_performance.py \[0m
2026-08-08T19:20:04.1190167Z [36;1m  src/jarvis_finance/api/schemas/portfolio_policy.py \[0m
2026-08-08T19:20:04.1190602Z [36;1m  src/jarvis_finance/api/schemas/performance_activation.py \[0m
2026-08-08T19:20:04.1191044Z [36;1m  src/jarvis_finance/api/schemas/reconciliation.py \[0m
2026-08-08T19:20:04.1191412Z [36;1m  src/jarvis_finance/api/security.py \[0m
2026-08-08T19:20:04.1191742Z [36;1m  src/jarvis_finance/cli/main.py \[0m
2026-08-08T19:20:04.1192104Z [36;1m  src/jarvis_finance/config/settings.py \[0m
2026-08-08T19:20:04.1192445Z [36;1m  src/jarvis_finance/ledger/cost_basis.py \[0m
2026-08-08T19:20:04.1192792Z [36;1m  src/jarvis_finance/ledger/performance.py \[0m
2026-08-08T19:20:04.1193140Z [36;1m  src/jarvis_finance/market/providers.py \[0m
2026-08-08T19:20:04.1193468Z [36;1m  src/jarvis_finance/quality/freshness.py \[0m
2026-08-08T19:20:04.1193794Z [36;1m  src/jarvis_finance/quality/git_safety.py \[0m
2026-08-08T19:20:04.1194161Z [36;1m  src/jarvis_finance/services/crypto_market_recovery.py \[0m
2026-08-08T19:20:04.1194794Z [36;1m  src/jarvis_finance/services/performance_activation.py \[0m
2026-08-08T19:20:04.1195765Z [36;1m  src/jarvis_finance/services/portfolio_data.py \[0m
2026-08-08T19:20:04.1196162Z [36;1m  src/jarvis_finance/services/portfolio_performance.py \[0m
2026-08-08T19:20:04.1196565Z [36;1m  src/jarvis_finance/services/portfolio_policy.py \[0m
2026-08-08T19:20:04.1196975Z [36;1m  src/jarvis_finance/services/reconciliation_snapshot.py \[0m
2026-08-08T19:20:04.1197409Z [36;1m  src/jarvis_finance/services/truewealth_productization.py \[0m
2026-08-08T19:20:04.1197824Z [36;1m  src/jarvis_finance/services/truewealth_service.py \[0m
2026-08-08T19:20:04.1198220Z [36;1m  src/jarvis_finance/services/truewealth_valuation.py \[0m
2026-08-08T19:20:04.1198604Z [36;1m  src/jarvis_finance/services/transfer_pairing.py \[0m
2026-08-08T19:20:04.1198955Z [36;1m  src/jarvis_finance/storage/database.py \[0m
2026-08-08T19:20:04.1199297Z [36;1m  src/jarvis_finance/storage/migrations.py \[0m
2026-08-08T19:20:04.1199633Z [36;1m  tests/conftest.py \[0m
2026-08-08T19:20:04.1199995Z [36;1m  tests/unit/test_api_write_security.py \[0m
2026-08-08T19:20:04.1200319Z [36;1m  tests/unit/test_git_safety.py \[0m
2026-08-08T19:20:04.1200701Z [36;1m  tests/unit/test_portfolio_data_ingestion_reconciliation.py \[0m
2026-08-08T19:20:04.1201143Z [36;1m  tests/unit/test_portfolio_performance_foundation.py \[0m
2026-08-08T19:20:04.1201542Z [36;1m  tests/unit/test_portfolio_policy_foundation.py \[0m
2026-08-08T19:20:04.1201972Z [36;1m  tests/unit/test_reconciliation_snapshot_foundation.py \[0m
2026-08-08T19:20:04.1202344Z [36;1m  tests/unit/test_settings.py \[0m
2026-08-08T19:20:04.1202703Z [36;1m  tests/unit/test_sprint20d_truewealth_productization.py \[0m
2026-08-08T19:20:04.1203113Z [36;1m  tests/unit/test_sprint20d_truewealth_valuation.py \[0m
2026-08-08T19:20:04.1203515Z [36;1m  tests/unit/test_sprint20e_crypto_market_recovery.py \[0m
2026-08-08T19:20:04.1203886Z [36;1m  tests/unit/test_transfer_pairing_v2.py[0m
2026-08-08T19:20:04.1253578Z shell: /usr/bin/bash -e {0}
2026-08-08T19:20:04.1253902Z env:
2026-08-08T19:20:04.1254180Z   PYTHONPATH: src
2026-08-08T19:20:04.1254423Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:20:04.1254817Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:20:04.1255638Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:20:04.1256460Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:20:04.1256833Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:20:04.1257169Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.1257596Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T19:20:04.1258022Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.1258402Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.1258785Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.1259179Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T19:20:04.1259512Z ##[endgroup]
2026-08-08T19:20:04.1901820Z All checks passed!
2026-08-08T19:20:04.1951183Z ##[group]Run python -m compileall -q src tests scripts/ci_portfolio_phase3_gate.py
2026-08-08T19:20:04.1951830Z [36;1mpython -m compileall -q src tests scripts/ci_portfolio_phase3_gate.py[0m
2026-08-08T19:20:04.2001311Z shell: /usr/bin/bash -e {0}
2026-08-08T19:20:04.2001603Z env:
2026-08-08T19:20:04.2001841Z   PYTHONPATH: src
2026-08-08T19:20:04.2002086Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:20:04.2002488Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:20:04.2003020Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:20:04.2003511Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:20:04.2003889Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:20:04.2004262Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.2005237Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T19:20:04.2005776Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.2006162Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.2006558Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.2006943Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T19:20:04.2007279Z ##[endgroup]
2026-08-08T19:20:04.9675633Z ##[group]Run python scripts/ci_portfolio_phase3_gate.py
2026-08-08T19:20:04.9676279Z [36;1mpython scripts/ci_portfolio_phase3_gate.py[0m
2026-08-08T19:20:04.9743327Z shell: /usr/bin/bash -e {0}
2026-08-08T19:20:04.9743737Z env:
2026-08-08T19:20:04.9744056Z   PYTHONPATH: src
2026-08-08T19:20:04.9744410Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:20:04.9745323Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:20:04.9746192Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:20:04.9746928Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:20:04.9747498Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:20:04.9748009Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.9748676Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T19:20:04.9749343Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.9750030Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.9750647Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:04.9751273Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T19:20:04.9751807Z ##[endgroup]
2026-08-08T19:20:06.2351271Z sprint5_fixture_schema=40
2026-08-08T19:20:06.5637197Z phase3_migration_gate=PASS
2026-08-08T19:20:06.5638219Z empty_schema=49 integrity=ok ingestion_analysis_scope_rows=0 default_performance_included=0
2026-08-08T19:20:06.5640225Z sprint5_schema=40_to_49 integrity=ok business_digest=bb8a14c6af1f793c4d521db72516f441685ab52f30336d26afba8b2dcbb95a01 scope_normalized=true audit_bound=true second_run_noop=true
2026-08-08T19:20:06.5641698Z settings_guard=PASS production_paths_rejected=true
2026-08-08T19:20:06.5800888Z ##[group]Run mkdir -p /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:20:06.5801774Z [36;1mmkdir -p /tmp/financemanager-phase3-controls/runtime[0m
2026-08-08T19:20:06.5802404Z [36;1mpython -m pytest -q \[0m
2026-08-08T19:20:06.5802861Z [36;1m  tests/unit/test_api_write_security.py \[0m
2026-08-08T19:20:06.5803349Z [36;1m  tests/unit/test_settings.py \[0m
2026-08-08T19:20:06.5803981Z [36;1m  tests/unit/test_portfolio_data_ingestion_reconciliation.py \[0m
2026-08-08T19:20:06.5804682Z [36;1m  tests/unit/test_portfolio_performance_foundation.py \[0m
2026-08-08T19:20:06.5805547Z [36;1m  tests/unit/test_portfolio_policy_foundation.py \[0m
2026-08-08T19:20:06.5806198Z [36;1m  tests/unit/test_reconciliation_snapshot_foundation.py \[0m
2026-08-08T19:20:06.5806859Z [36;1m  tests/unit/test_transfer_pairing_v2.py[0m
2026-08-08T19:20:06.5876596Z shell: /usr/bin/bash -e {0}
2026-08-08T19:20:06.5876879Z env:
2026-08-08T19:20:06.5877104Z   PYTHONPATH: src
2026-08-08T19:20:06.5877397Z   JARVIS_FINANCE_ENV: test
2026-08-08T19:20:06.5877818Z   JARVIS_FINANCE_DB_PATH: /tmp/financemanager-phase3-controls/finance.sqlite3
2026-08-08T19:20:06.5878363Z   JARVIS_FINANCE_RUNTIME_DIR: /tmp/financemanager-phase3-controls/runtime
2026-08-08T19:20:06.5878829Z   JARVIS_FINANCE_CI_ROOT: /tmp/financemanager-phase3-migration
2026-08-08T19:20:06.5879194Z   JARVIS_FINANCE_WRITE_MODE: disabled
2026-08-08T19:20:06.5879534Z   pythonLocation: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:06.5879956Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib/pkgconfig
2026-08-08T19:20:06.5880369Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:06.5880960Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:06.5881346Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.15/x64
2026-08-08T19:20:06.5881724Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.15/x64/lib
2026-08-08T19:20:06.5882055Z ##[endgroup]
2026-08-08T19:20:35.1365508Z ........................................................................ [ 80%]
2026-08-08T19:20:41.6245609Z .................                                                        [100%]
2026-08-08T19:20:41.6246656Z =============================== warnings summary ===============================
2026-08-08T19:20:41.6247850Z ../../../../../opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/fastapi/testclient.py:1
2026-08-08T19:20:41.6249808Z   /opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/fastapi/testclient.py:1: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.
2026-08-08T19:20:41.6251606Z     from starlette.testclient import TestClient as TestClient  # noqa
2026-08-08T19:20:41.6252206Z 
2026-08-08T19:20:41.6252703Z -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
2026-08-08T19:20:41.6253465Z 89 passed, 1 warning in 33.98s
2026-08-08T19:20:41.9077210Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T19:20:41.9078409Z Post job cleanup.
2026-08-08T19:20:42.0410525Z (node:2283) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-08-08T19:20:42.0411883Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-08-08T19:20:42.0736924Z [command]/usr/bin/tar --posix -cf cache.tzst --exclude cache.tzst -P -C /home/runner/work/FinanceManager/FinanceManager --files-from manifest.txt --use-compress-program zstdmt
2026-08-08T19:20:42.7147060Z (node:2283) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.
2026-08-08T19:20:43.7008486Z Sent 23072823 of 157290551 (14.7%), 22.0 MBs/sec
2026-08-08T19:20:43.9702201Z Sent 157290551 of 157290551 (100.0%), 118.1 MBs/sec
2026-08-08T19:20:44.0791465Z Cache saved with the key: setup-python-Linux-x64-24.04-Ubuntu-python-3.11.15-pip-1142f0e2496362389faab45cc2b2d5dacbb96b059f6c5143fd25b1b0407d64f2
2026-08-08T19:20:44.0964867Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-08-08T19:20:44.0966471Z Post job cleanup.
2026-08-08T19:20:44.1995682Z [command]/usr/bin/git version
2026-08-08T19:20:44.2067857Z git version 2.54.0
2026-08-08T19:20:44.2142841Z Temporarily overriding HOME='/home/runner/work/_temp/8efadb1a-bc9f-4c25-969d-dafbd5dc9faf' before making global git config changes
2026-08-08T19:20:44.2144363Z Adding repository directory to the temporary git global config as a safe directory
2026-08-08T19:20:44.2148401Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/FinanceManager/FinanceManager
2026-08-08T19:20:44.2211981Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-08-08T19:20:44.2286279Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-08-08T19:20:44.2697673Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-08-08T19:20:44.2742579Z http.https://github.com/.extraheader
2026-08-08T19:20:44.2800301Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2026-08-08T19:20:44.2833542Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-08-08T19:20:44.3299415Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-08-08T19:20:44.3416363Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-08-08T19:20:44.4049759Z Cleaning up orphan processes
2026-08-08T19:20:44.4346142Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-python@v5. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
